﻿Imports MySql.Data.MySqlClient

Public Class CFacturacion

    Private conn As String = My.Settings.Conexion

#Region "Get"

    ''' <summary>
    ''' Retorna consolidados para llenar la grilla. Retorna consolidados de los ultimos 2 meses
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetConsolidados() As DataSet
        Return Data.ExecuteDataSet(Me.conn, "GetConsolidados", Nothing)
    End Function

    ''' <summary>
    ''' Retorna listado de agentes para llenar cun combo
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetListadoAgentes() As DataSet
        Return Data.ExecuteDataSet(Me.conn, "GetListadoAgentes", Nothing)
    End Function

    ''' <summary>
    ''' Retorna toda la info del consolidado que le llega
    ''' </summary>
    ''' <param name="id"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetConsolidadoById(ByVal id As Integer) As DataSet
        Dim arrParam(1) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varIdConsolidado", id)
        Return Data.ExecuteDataSet(Me.conn, "GetConsolidadoById", arrParam)
    End Function

    ''' <summary>
    ''' Retorna los consolidados que cumplen con los criterios que le llegan a la funcion
    ''' </summary>
    ''' <param name="numero">Id del consolidado</param>
    ''' <param name="tipo">Exportacion o Importacion</param>
    ''' <param name="agente"></param>
    ''' <param name="mbl"></param>
    ''' <param name="origen"></param>
    ''' <param name="destino"></param>
    ''' <param name="desde">Fecha de creación en formato yyyymmdd</param>
    ''' <param name="hasta">Fecha de creación en formato yyyymmdd</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function BuscarConsolidado(ByVal numero As Integer, ByVal agente As Integer, ByVal mbl As String, ByVal origen As Integer, ByVal destino As Integer, ByVal desde As String, ByVal hasta As String) As DataSet
        'Construye cadena con los criterios
        Dim criterio As String = ""
        If (numero > 0) Then
            criterio = criterio & " AND CONSOLIDADO.NUMERO = " & numero
        End If
        If (agente > 0) Then
            criterio = criterio & " AND CONSOLIDADO.IDAGENTE = " & agente
        End If
        If (mbl.Length > 0) Then
            criterio = criterio & " AND CONSOLIDADO.MAWB = '" & mbl & "'"
        End If
        If (origen > 0) Then
            criterio = criterio & " AND CONSOLIDADO.IDORIGEN = " & origen
        End If
        If (destino > 0) Then
            criterio = criterio & " AND CONSOLIDADO.IDDESTINO = " & destino
        End If
        If (desde.Length > 0) Then
            criterio = criterio & " AND CONSOLIDADO.FECHA >= '" & desde & "'"
        End If
        If (hasta.Length > 0) Then
            criterio = criterio & " AND CONSOLIDADO.FECHA <= '" & hasta & "'"
        End If

        'Construye la consulta que se va a ejecutar
        Dim consulta As String = "SELECT CONSOLIDADO.ID, CIUDAD.CIUDAD ORIGEN, CIUDAD1.CIUDAD DESTINO, DATE_FORMAT(FECHA,'%Y/%m/%d') FECHA, TIPO, TRANSPORTE, AGENTE.AGENTE, MAWB, NUMERO "
        consulta = consulta & "FROM CONSOLIDADO INNER JOIN CIUDAD ON CONSOLIDADO.IDORIGEN = CIUDAD.ID INNER JOIN CIUDAD CIUDAD1 ON CONSOLIDADO.IDDESTINO = CIUDAD1.ID "
        consulta = consulta & "INNER JOIN AGENTE ON CONSOLIDADO.IDAGENTE = AGENTE.ID "
        consulta = consulta & "WHERE CONSOLIDADO.ACTIVO = 1 "
        If (criterio.Length > 0) Then
            consulta = consulta & criterio
        End If

        'Agrega order by
        consulta = consulta & " ORDER BY CONSOLIDADO.ID DESC;"

        'Se ejecuta la consulta
        Return Data.ExecuteSelect(Me.conn, consulta, Nothing)
    End Function

    ''' <summary>
    ''' Retorna en un arreglo de strings los valores para el reporte
    ''' </summary>
    ''' <param name="tipo"></param>
    ''' <param name="transporte"></param>
    ''' <param name="origen"></param>
    ''' <param name="cliente"></param>
    ''' <param name="fecha1"></param>
    ''' <param name="fecha2"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetReporte(ByVal tipo As String, ByVal transporte As String, ByVal origen As Integer, ByVal cliente As Integer, ByVal fecha1 As String, ByVal fecha2 As String) As String()
        'Construye cadena con los criterios
        Dim criterioHija As String = ""
        Dim criterioConsolidado As String = ""
        If (tipo <> "0") Then
            criterioHija = criterioHija & " AND CONSOLIDADO.TIPO = '" & tipo & "'"
            criterioConsolidado = criterioConsolidado & " AND CONSOLIDADO.TIPO = '" & tipo & "'"
        End If
        If (transporte <> "0") Then
            criterioHija = criterioHija & " AND CONSOLIDADO.TRANSPORTE = '" & transporte & "'"
            criterioConsolidado = criterioConsolidado & " AND CONSOLIDADO.TRANSPORTE = '" & transporte & "'"
        End If
        If (origen > 0) Then
            criterioHija = criterioHija & " AND CONSOLIDADO.IDORIGEN = " & origen.ToString
            criterioConsolidado = criterioConsolidado & " AND CONSOLIDADO.IDORIGEN = " & origen.ToString
        End If
        If (cliente > 0) Then
            criterioHija = criterioHija & " AND HIJA.IDCLIENTE = " & cliente.ToString            
        End If
        If (fecha1.Length > 0) Then
            criterioHija = criterioHija & " AND HIJA.FECHA >= '" & fecha1 & "'"
            criterioConsolidado = criterioConsolidado & " AND CONSOLIDADO.FECHA >= '" & fecha1 & "'"
        End If
        If (fecha2.Length > 0) Then
            criterioHija = criterioHija & " AND HIJA.FECHA <= '" & fecha2 & "'"
            criterioConsolidado = criterioConsolidado & " AND CONSOLIDADO.FECHA <= '" & fecha2 & "'"
        End If

        Dim arrRetorno() As String = {"0", "0", "0", "0", "0"}
        Dim consulta As String
        Dim ds As New DataSet

        'Numero de facturas
        consulta = "SELECT COUNT(*) FROM HIJA INNER JOIN CONSOLIDADO ON HIJA.IDCONSOLIDADO = CONSOLIDADO.ID WHERE CONSOLIDADO.ACTIVO = 1 AND HIJA.FACTURA > 0 " & criterioHija & "; "
        'Numero de consolidados
        consulta = consulta & "SELECT COUNT(*) FROM CONSOLIDADO WHERE CONSOLIDADO.ACTIVO = 1 " & criterioConsolidado & "; "
        'Numero de hijas
        consulta = consulta & "SELECT COUNT(*) FROM HIJA INNER JOIN CONSOLIDADO ON HIJA.IDCONSOLIDADO = CONSOLIDADO.ID WHERE CONSOLIDADO.ACTIVO = 1 " & criterioHija & "; "
        'Cantidad de kilos
        consulta = consulta & "SELECT SUM(HIJA.PESO), UNIDADPESO FROM HIJA INNER JOIN CONSOLIDADO ON HIJA.IDCONSOLIDADO = CONSOLIDADO.ID WHERE CONSOLIDADO.ACTIVO = 1 AND FACTURAPOR = 'PESO' " & criterioHija & " GROUP BY UNIDADPESO; "
        'Cantidad de contenedores
        consulta = consulta & "SELECT SUM(NUMEROCONTENEDORES) FROM HIJA INNER JOIN CONSOLIDADO ON HIJA.IDCONSOLIDADO = CONSOLIDADO.ID WHERE CONSOLIDADO.ACTIVO = 1 " & criterioHija & "; "

        ds = Data.ExecuteSelect(Me.conn, consulta, Nothing)
        If (ds.Tables(0).Rows.Count > 0) Then
            arrRetorno(0) = ds.Tables(0).Rows(0)(0).ToString
        End If
        If (ds.Tables(1).Rows.Count > 0) Then
            arrRetorno(1) = ds.Tables(1).Rows(0)(0).ToString
        End If
        If (ds.Tables(2).Rows.Count > 0) Then
            arrRetorno(2) = ds.Tables(2).Rows(0)(0).ToString
        End If
        Dim kilos As Double = 0
        If (ds.Tables(3).Rows.Count > 0) Then
            For i As Integer = 0 To ds.Tables(3).Rows.Count - 1
                Select Case ds.Tables(3).Rows(i)("UNIDADPESO").ToString
                    Case "KILO"
                        kilos = kilos + CDbl(ds.Tables(3).Rows(i)(0).ToString)
                    Case "LIBRA"
                        kilos = kilos + (CDbl(ds.Tables(3).Rows(i)(0).ToString) / 2.20462)
                    Case "TONELADA"
                        kilos = kilos + (CDbl(ds.Tables(3).Rows(i)(0).ToString) * 1000)
                End Select
            Next
            arrRetorno(3) = FormatNumber(kilos, 2).ToString
        End If
        If (ds.Tables(4).Rows.Count > 0) Then
            arrRetorno(4) = ds.Tables(4).Rows(0)(0).ToString
        End If

        Return arrRetorno
    End Function

    ''' <summary>
    ''' Retorna las hijas que cumplen con los criterios que le llegan a la funcion
    ''' </summary>
    ''' <param name="consolidado"></param>
    ''' <param name="tipo">Exportacion o Importacion</param>
    ''' <param name="origen"></param>
    ''' <param name="destino"></param>
    ''' <param name="factura"></param>
    ''' <param name="cliente"></param>
    ''' <param name="desde">Fecha de creación en formato yyyymmdd</param>
    ''' <param name="hasta">Fecha de creación en formato yyyymmdd</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function BuscarHijas(ByVal consolidado As Integer, ByVal tipo As String, ByVal origen As Integer, ByVal destino As Integer, ByVal factura As Integer, ByVal cliente As Integer, ByVal desde As String, ByVal hasta As String, ByVal transporte As String) As DataSet
        'Construye cadena con los criterios
        Dim criterio As String = ""
        If (consolidado > 0) Then
            criterio = criterio & " AND HIJA.IDCONSOLIDADO = " & consolidado.ToString
        End If
        If (tipo <> "0") Then
            criterio = criterio & " AND CONSOLIDADO.TIPO = '" & tipo & "'"
        End If
        If (factura > 0) Then
            criterio = criterio & " AND HIJA.FACTURA = " & factura.ToString
        End If
        If (cliente > 0) Then
            criterio = criterio & " AND HIJA.IDCLIENTE = " & cliente.ToString
        End If
        If (origen > 0) Then
            criterio = criterio & " AND CONSOLIDADO.IDORIGEN = " & origen
        End If
        If (destino > 0) Then
            criterio = criterio & " AND CONSOLIDADO.IDDESTINO = " & destino
        End If
        If (desde.Length > 0) Then
            criterio = criterio & " AND HIJA.FECHA >= '" & desde & "'"
        End If
        If (hasta.Length > 0) Then
            criterio = criterio & " AND HIJA.FECHA <= '" & hasta & "'"
        End If
        criterio = criterio & " AND CONSOLIDADO.TRANSPORTE = '" & transporte & "'"

        'Construye la consulta que se va a ejecutar
        Dim consulta As String = "SELECT HIJA.ID, MONEDA.MONEDA, FACTURA, CLIENTE.NOMBRE CLIENTE, BULTOS, FACTURAPOR, HIJA.FECHA, HIJA.NUMERO "
        consulta = consulta & "FROM HIJA INNER JOIN MONEDA ON HIJA.IDMONEDA = MONEDA.ID "
        consulta = consulta & "INNER JOIN CLIENTE ON HIJA.IDCLIENTE = CLIENTE.ID "
        consulta = consulta & "INNER JOIN CONSOLIDADO ON HIJA.IDCONSOLIDADO = CONSOLIDADO.ID "
        consulta = consulta & "WHERE HIJA.IDCONSOLIDADO IS NOT NULL "
        If (criterio.Length > 0) Then
            consulta = consulta & criterio
        End If

        'Agrega order by
        consulta = consulta & " ORDER BY HIJA.NUMERO;"

        'Se ejecuta la consulta
        Return Data.ExecuteSelect(Me.conn, consulta, Nothing)
    End Function

    ''' <summary>
    ''' Retorna info del consolidado y tabla con datos de las hijas
    ''' </summary>
    ''' <param name="consolidado"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetHijasConsolidado(ByVal consolidado As Integer)
        Dim arrParam(1) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varIdConsolidado", consolidado)
        Return Data.ExecuteDataSet(Me.conn, "GetHijasConsolidado", arrParam)
    End Function

    ''' <summary>
    ''' Retorna toda la info de la hija que le llega
    ''' </summary>
    ''' <param name="id"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetHijaById(ByVal id As Integer) As DataSet
        Dim arrParam(1) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varIdHija", id)
        Return Data.ExecuteDataSet(Me.conn, "GetHijaById", arrParam)
    End Function

    ''' <summary>
    ''' Retorna los valores de los valores de la hija que le llega
    ''' </summary>
    ''' <param name="idHija"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetValores1(ByVal idHija As Integer) As DataSet
        Dim arrParam(1) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varIdHija", idHija)
        Return Data.ExecuteDataSet(Me.conn, "GetValores1", arrParam)
    End Function

    ''' <summary>
    ''' Retorna los conceptos de la hija que le llega
    ''' </summary>
    ''' <param name="idHija"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetValores2(ByVal idHija As Integer) As DataSet
        Dim arrParam(1) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varIdHija", idHija)
        Return Data.ExecuteDataSet(Me.conn, "GetValores2", arrParam)
    End Function

    ''' <summary>
    ''' Retorna el valor de la moneda en pesos (trm) para el día que le llega
    ''' </summary>
    ''' <param name="idMoneda"></param>
    ''' <param name="fecha"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetTrmMoneda(ByVal idMoneda As Integer, ByVal fecha As String) As Double
        Dim arrParam(3) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varIdMoneda", idMoneda)
        arrParam(1) = New MySqlParameter("?varFecha", fecha)
        Dim ds As New DataSet
        ds = Data.ExecuteDataSet(Me.conn, "GetTrmMoneda", arrParam)

        Dim retorno As Double = 0
        If (ds.Tables(0).Rows.Count > 0) Then
            retorno = ds.Tables(0).Rows(0)(0)
        End If
        Return retorno
    End Function

    ''' <summary>
    ''' Retorna la info necesaria para imprimir una factura. Retorna un dataset tipado (dsFactura)
    ''' </summary>
    ''' <param name="idHija"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetInfoFactura(ByVal idHija As Integer) As DataSet
        'Dim ds As New dsFactura
        Dim arrParam(1) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varIdHija", idHija)
        Return Data.ExecuteDataSet(Me.conn, "GetInfoFactura", arrParam)        
    End Function

    ''' <summary>
    ''' Retorna el valor equivalente entre las dos monedas que le llegan para la fecha dada
    ''' </summary>
    ''' <param name="moneda1"></param>
    ''' <param name="moneda2"></param>
    ''' <param name="fecha"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetCambio(ByVal moneda1 As Integer, ByVal moneda2 As Integer, ByVal fecha As String) As Double
        Dim cambio As Double = 0
        Dim ds As New DataSet
        Dim arrParam(3) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varMoneda1", moneda1)
        arrParam(1) = New MySqlParameter("?varMoneda2", moneda2)
        arrParam(2) = New MySqlParameter("?varFecha", fecha)
        ds = Data.ExecuteDataSet(Me.conn, "GetCambio", arrParam)
        If (ds.Tables(0).Rows.Count > 0) Then
            cambio = ds.Tables(0).Rows(0)("VALOR")
        End If
        Return cambio
    End Function

    Public Function GetSiguienteNumeroHija() As Integer
        Dim ds As New DataSet
        ds = Data.ExecuteDataSet(Me.conn, "GetSiguienteNumeroHija")
        If (ds.Tables(0).Rows.Count > 0) Then
            If (ds.Tables(0).Rows(0)(0) Is System.DBNull.Value) Then
                Return 1
            Else
                Return CInt(ds.Tables(0).Rows(0)(0).ToString)
            End If
        Else
            Return 1
        End If
    End Function

    Public Function GetSiguienteNumeroConsolidado(ByVal tipo As String) As Integer
        Dim ds As New DataSet
        Dim arrParam(1) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varTipo", tipo)
        ds = Data.ExecuteDataSet(Me.conn, "GetSiguienteNumeroConsolidado", arrParam)
        If (ds.Tables(0).Rows.Count > 0) Then
            If (ds.Tables(0).Rows(0)(0) Is System.DBNull.Value) Then
                Return 1
            Else
                Return CInt(ds.Tables(0).Rows(0)(0).ToString)
            End If
        Else
            Return 1
        End If
    End Function

    ''' <summary>
    ''' Retorna numeros de consolidados existentes, de acuerdo al tipo que le llega (aereo o maritimo)
    ''' </summary>
    ''' <param name="tipo"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetNumerosConsolidados(ByVal tipo As String) As DataSet
        Dim arrParam(1) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varTipo", tipo)
        Return Data.ExecuteDataSet(Me.conn, "GetNumerosConsolidados", arrParam)
    End Function

#End Region

#Region "Actualizar"

    Public Function ActualizarConsolidado(ByVal id As Integer, ByVal origen As Integer, ByVal destino As Integer, ByVal agente As Integer, ByVal mawb As String, ByVal peso As Double, ByVal tipo As String, ByVal transporte As String, ByVal unidad As String, ByVal fecha As String, ByVal numero As Integer) As String
        Dim arrParam(12) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varIdConsolidado", id)
        arrParam(1) = New MySqlParameter("?varIdOrigen", origen)
        arrParam(2) = New MySqlParameter("?varIdDestino", destino)
        arrParam(3) = New MySqlParameter("?varIdAgente", agente)
        arrParam(4) = New MySqlParameter("?varMawb", mawb)
        arrParam(5) = New MySqlParameter("?varPeso", peso)
        arrParam(6) = New MySqlParameter("?varTipo", tipo)
        arrParam(7) = New MySqlParameter("?varTransporte", transporte)
        arrParam(8) = New MySqlParameter("?varUnidad", unidad)
        arrParam(9) = New MySqlParameter("?varFecha", fecha)
        arrParam(10) = New MySqlParameter("?varNumero", numero)
        arrParam(11) = New MySqlParameter("?retorno", MySqlDbType.VarChar, 200)
        arrParam(11).Direction = ParameterDirection.Output
        Data.ExecuteNonQuery(Me.conn, "ActualizarConsolidado", arrParam)
        Return arrParam(11).Value
    End Function

    Public Function ActualizarHija(ByVal id As Integer, ByVal idConsolidado As Integer, ByVal moneda As Integer, ByVal cliente As Integer, ByVal contacto As Integer, ByVal bultos As Integer, ByVal facturaPor As String, ByVal peso As Double, ByVal unidadPeso As String, ByVal volumen As Double, ByVal numeroContenedores As Integer, ByVal tipoContenedor As String, ByVal fecha As String, ByVal comentarios As String, ByVal trm As Double, ByVal descripcionCarga As String, ByVal consecutivoControl As Integer, ByVal numero As String, ByVal tipo As String, ByVal puerto As String, ByVal fechaCargue As String, ByVal declaracion As String, ByVal anticipo As Double, ByVal fechaRecepcion As String, ByVal provision As Double, ByVal minimoProvision As Double, ByVal fechaPago As String) As Integer
        Dim arrParam(28) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varIdHija", id)
        arrParam(1) = New MySqlParameter("?varIdConsolidado", idConsolidado)
        arrParam(2) = New MySqlParameter("?varIdMoneda", moneda)
        arrParam(3) = New MySqlParameter("?varIdCliente", cliente)
        arrParam(4) = New MySqlParameter("?varIdContacto", contacto)
        arrParam(5) = New MySqlParameter("?varBultos", bultos)
        arrParam(6) = New MySqlParameter("?varFacturaPor", facturaPor)
        arrParam(7) = New MySqlParameter("?varPeso", peso)
        arrParam(8) = New MySqlParameter("?varUnidadPeso", unidadPeso)
        arrParam(9) = New MySqlParameter("?varVolumen", volumen)
        arrParam(10) = New MySqlParameter("?varNumeroContenedores", numeroContenedores)
        arrParam(11) = New MySqlParameter("?varTipoContenedor", tipoContenedor)
        arrParam(12) = New MySqlParameter("?varFecha", fecha)
        arrParam(13) = New MySqlParameter("?varComentarios", comentarios)
        arrParam(14) = New MySqlParameter("?varTrm", trm)
        arrParam(15) = New MySqlParameter("?varDescripcionCarga", descripcionCarga)
        arrParam(16) = New MySqlParameter("?varConsecutivo", consecutivoControl)
        arrParam(17) = New MySqlParameter("?varNumero", numero)
        arrParam(18) = New MySqlParameter("?varTipo", tipo)
        arrParam(19) = New MySqlParameter("?varPuerto", puerto)
        arrParam(20) = New MySqlParameter("?varFechaCargue", fechaCargue)
        arrParam(21) = New MySqlParameter("?varDeclaracion", declaracion)
        arrParam(22) = New MySqlParameter("?varAnticipo", anticipo)
        arrParam(23) = New MySqlParameter("?varFechaRecepcion", fechaRecepcion)
        arrParam(24) = New MySqlParameter("?varProvision", provision)
        arrParam(25) = New MySqlParameter("?varMinimoProvision", minimoProvision)
        arrParam(26) = New MySqlParameter("?varFechaPago", fechaPago)
        arrParam(27) = New MySqlParameter("?retorno", MySqlDbType.Int32)
        arrParam(27).Direction = ParameterDirection.Output
        Data.ExecuteNonQuery(Me.conn, "ActualizarHija", arrParam)
        Return CInt(arrParam(27).Value)
    End Function

    Public Sub ActualizarValor1(ByVal id As Integer, ByVal idHija As Integer, ByVal concepto As Integer, ByVal idMoneda As Integer, ByVal idAgente As Integer, ByVal valor As Double, ByVal descripcionConcepto As String, ByVal iva As Double)
        Dim arrParam(8) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varId", id)
        arrParam(1) = New MySqlParameter("?varIdHija", idHija)
        arrParam(2) = New MySqlParameter("?varConcepto", concepto)
        arrParam(3) = New MySqlParameter("?varIdMoneda", idMoneda)
        arrParam(4) = New MySqlParameter("?varIdAgente", idAgente)
        arrParam(5) = New MySqlParameter("?varValor", valor)
        arrParam(6) = New MySqlParameter("?varDescConcepto", descripcionConcepto)
        arrParam(7) = New MySqlParameter("?varIVA", iva)
        Data.ExecuteNonQuery(Me.conn, "ActualizarValor1", arrParam)
    End Sub

    Public Sub ActualizarValor2(ByVal id As Integer, ByVal idHija As Integer, ByVal idConcepto As Integer, ByVal valor As Double, ByVal descripcionConcepto As String, ByVal idMoneda As Integer, ByVal iva As Double)
        Dim arrParam(7) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varId", id)
        arrParam(1) = New MySqlParameter("?varIdHija", idHija)
        arrParam(2) = New MySqlParameter("?varIdConcepto", idConcepto)
        arrParam(3) = New MySqlParameter("?varValor", valor)
        arrParam(4) = New MySqlParameter("?varDescConcepto", descripcionConcepto)
        arrParam(5) = New MySqlParameter("?varIdMoneda", idMoneda)
        arrParam(6) = New MySqlParameter("?varIVA", iva)
        Data.ExecuteNonQuery(Me.conn, "ActualizarValor2", arrParam)
    End Sub
#End Region

#Region "Eliminar"

    Public Sub EliminarConsolidado(ByVal id As Integer)
        Dim arrParam(1) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varId", id)
        Data.ExecuteNonQuery(Me.conn, "EliminarConsolidado", arrParam)
    End Sub

    Public Sub EliminarHija(ByVal id As Integer)
        Dim arrParam(1) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varId", id)
        Data.ExecuteNonQuery(Me.conn, "EliminarHija", arrParam)
    End Sub

    Public Sub EliminarValor1(ByVal id As Integer)
        Dim arrParam(1) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varId", id)
        Data.ExecuteNonQuery(Me.conn, "EliminarValor1", arrParam)
    End Sub

    Public Sub EliminarValor2(ByVal id As Integer)
        Dim arrParam(1) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varId", id)
        Data.ExecuteNonQuery(Me.conn, "EliminarValor2", arrParam)
    End Sub

#End Region

    ''' <summary>
    ''' Asigna factura a la hija que le llega. Si la asignación es exitosa retorna vacío, de lo contrario retorna
    ''' mensaje informando qué pasó
    ''' </summary>
    ''' <param name="idHija"></param>
    ''' <param name="tipo">"AEREO", "TERCEROS", "MARITIMO"</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function AsignarFactura(ByVal idHija As Integer, ByVal tipo As String) As String

        Dim arrParam(3) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varIdHija", idHija)
        arrParam(1) = New MySqlParameter("?varTipo", tipo)
        arrParam(2) = New MySqlParameter("?varRetorno", MySqlDbType.VarChar, 200)
        arrParam(2).Direction = ParameterDirection.Output
        Data.ExecuteNonQuery(Me.conn, "AsignarFactura", arrParam)
        Return arrParam(2).Value.ToString
    End Function

    ''' <summary>
    ''' Valida que el numero de hija que le llega no se repite en otra hija
    ''' </summary>
    ''' <param name="id"></param>
    ''' <param name="numero"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function ValidarNumeroHija(ByVal id As Integer, ByVal numero As Integer) As Boolean
        Dim ds As New DataSet
        Dim arrParam(2) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varId", id)
        arrParam(1) = New MySqlParameter("?varNumero", numero)
        ds = Data.ExecuteDataSet(Me.conn, "ValidarNumeroHija", arrParam)
        If (ds.Tables(0).Rows.Count > 0) Then
            Return False
        Else
            Return True
        End If
    End Function

    ''' <summary>
    ''' Valida que el numero del consolidado que le llega no se repite en otro consolidado
    ''' </summary>
    ''' <param name="id"></param>
    ''' <param name="numero"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function ValidarNumeroConsolidado(ByVal id As Integer, ByVal numero As Integer, ByVal tipo As String, ByVal numeroRelacionado As Boolean) As Boolean
        'Si es un numero relacionado no se debe validar, retorna true de una vez
        If (numeroRelacionado) Then
            Return True
        End If
        Dim ds As New DataSet
        Dim arrParam(3) As MySqlParameter
        arrParam(0) = New MySqlParameter("?varId", id)
        arrParam(1) = New MySqlParameter("?varNumero", numero)
        arrParam(2) = New MySqlParameter("?varTipo", tipo)
        ds = Data.ExecuteDataSet(Me.conn, "ValidarNumeroConsolidado", arrParam)
        If (ds.Tables(0).Rows.Count > 0) Then
            Return False
        Else
            Return True
        End If
    End Function

End Class
